#ifndef SYSTEM_H__
#define SYSTEM_H__

/*system.h
**这个头文件包含一些水下机器人需要使用的系统配置，
**以及系统初始化等需要使用的函数
*/

#include <rtthread.h>
#include <rtdevice.h>
#include "platform.h"
#include "servoio.h"
#include "mpu6xxx.h"
#include "serial.h"
#include "alarm.h"

extern device_servo esc_left, esc_right, esc_back;
extern struct mpu6xxx_device *mpu6050;

extern struct rt_mutex mutex_esc;


/*如果输入值小于lb，返回lb；如果输入值大于ub，返回ub*/
int restirct(int val, int ub, int lb);

/*完成最为初始的系统初始化工作*/
void system_startup(void *arg);

/*初始化一个双向电调
**电调接受与舵机相同的信号
**双向电调通过上电时的信号确定双向/单向模式
*/
void esc_init(void *arg);

/*初始化所有传感器*/
void sensors_init(void *arg);

/*初始化下潜步进电机*/
void stepper_init(void *arg);

/*上浮*/
void float_up();

/*下潜*/
void dive_down();

/*停止上浮或下潜*/
void hang();

/*一个简单的使用sbus接收机遥控控制的函数，应该放在独立的一个线程中运行*/
void sbusd(void *arg);

#endif
